package java_lang_ref.weakreference;

/** */
/**
 * 该类演示了Soft Reference的应用
 * 版权 本文版权属Java天下
 */

import java.lang.ref.SoftReference;

import util.LogUtil;

/** */
/**
 * @author ajie
 */

public class SoftReferenceTest {
	private static final String TAG = "SoftReferenceTest";

	/** */
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SoftReferenceTest t = new SoftReferenceTest();
		t.test();
	}

	private void test() {
		A a = new A();

		// 使用a
		a.test();

		// 使用完了a,将它设置为soft引用类型,并且释放强引用
		SoftReference sr = new SoftReference(a);
		a = null;

		// 下次使用
		if (sr != null) {
			LogUtil.e(TAG, "sr != null");
			a = (A) sr.get();
			a.test();
		} else {
			// GC由于低内存,已释放a,因此需要重新装载
			LogUtil.e(TAG, "sr == null");
			a = new A();
			a.test();
			a = null;
			sr = new SoftReference(a);
		}
	}

	class A {
		public void test() {
			LogUtil.e(TAG, "Soft Reference test");
		}
	}
}